function permute(nums) {
    let res = []   // 存放所有符合条件结果的集合
    let path = []  // 存放当前符合条件的结果
    function backtracking(nums) {
        if (path.length === nums.length) {
            // 说明找到了一切符合条件的结果，将当前符合条件的结果放入集合中
            res.push([...path])
            return
        }
        // 枚举可选元素列表
        for (let i = 0; i < nums.length; i++) {
            if (!path.includes(nums[i])) { // 从当前路径中没有出现的数字中选择
                path.push(nums[i]) // 选择元素
                backtracking(nums) // 递归搜索
                path.pop()
            }
        }
    }
    backtracking(nums)
    return res
}

let arr = [1, 2, 3]
// console.log(permute(arr));

function permute2(arr) {
    let res = []
    let path = []
    function dfs() {
        if (path.length === arr.length) {
            res.push([...path])
            return
        }
        for (let i = 0; i < arr.length; i++) {
            if (!path.includes(arr[i])) {
                path.push(arr[i])
                dfs()
                path.pop()
            }
        }
    }
    dfs(0)
    return res

}

console.log(permute2(arr));